import 'dart:io';
import 'dart:convert';

Future testFuture() {
  // throw new Error();
  // return Future.value('success');
  // return Future.error('error');
  return Future.delayed(Duration(seconds: 1),()=>Future.value('success'));    //延迟1秒返回
}


func() async {
  testFuture().then((value) {
    print(value);
  },onError: (e){
    print('onError');
  })
  .catchError((err) {           // 如果onError 和catchError同时存在只会调用onError
    print('catchError');
  });
}


//***************  使用async和await  ****************//

Future checkVersion() async {
  var version = await lookUpVersion();
  // 其他操作
}

//***************  捕获错误  ****************//

try {
  var version = await lookUpVersion();
} catch (e) {
  // 这里可以看到是什么错误。
}finally{
  // 正确的解决方式写在这里
}

//***************  定义一个异步函数  ****************//

Future<String> lookUpVersion2() async{
    print('lookUpVersion2()异步方法 返回值是：1.0.0');
    return '1.0.0';
}

Future<void> lookUpVersion3() async {
  print('lookUpVersion3()异步方法 没有返回值');
}

//***************  await for循环的使用示例  ****************//

// await for循环的使用示例
// 这里是读取本地文件的内容
Future test() async {
      var config=File('/Users/benchu/userData/project/flutter/flutter_exercise/lib/Dart/test.txt');
      // 打开io流进行文件读取
      Stream<List<int>> inputStream = config.openRead();
      var lines = inputStream
        // 设置编码格式为utf-8
        .transform(utf8.decoder)
        .transform(LineSplitter());
      try {
          await for (var line in lines) {
              print('从Stream中获取到的内容是： ${line} \r文本内容长度为：'+ '${line.length}\r=======');
          }
        print('文件现在没有关闭。。。');
      } catch (e) {
        print(e);
      }
}